package com.xy.webadmin.app.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.util.Date;
import java.util.Map;

/**
 * MQTT终端配置VO视图对象。
 *
 * @author xiaoyue
 * @date 2025-05-13
 */
@Schema(description = "MQTT终端配置VO视图对象")
@Data
public class MqttBrokerConfigVo {

    /**
     * 主键。
     */
    @Schema(description = "主键")
    private Long id;

    /**
     * 配置名称。
     */
    @Schema(description = "配置名称")
    private String name;

    /**
     * 终端控制台地址。
     */
    @Schema(description = "终端控制台地址")
    private String brokerUrl;

    /**
     * 客户端ID。
     */
    @Schema(description = "客户端ID")
    private String clientId;

    /**
     * 认证用户名。
     */
    @Schema(description = "认证用户名")
    private String username;

    /**
     * 认证密码。
     */
    @Schema(description = "认证密码")
    private String password;

    /**
     * 是否清除会话：0保留/1清除。
     */
    @Schema(description = "是否清除会话：0保留/1清除")
    private Integer cleanSession;

    /**
     * 心跳间隔。
     */
    @Schema(description = "心跳间隔")
    private Integer keepalive;

    /**
     * 连接超时时间（秒）。
     */
    @Schema(description = "连接超时时间（秒）")
    private Integer connectionTimeout;

    /**
     * 最大未确认消息数。
     */
    @Schema(description = "最大未确认消息数")
    private Integer maxInflight;

    /**
     * 否自动重连：0否/1是。
     */
    @Schema(description = "否自动重连：0否/1是")
    private Integer autoReconnect;

    /**
     * 是否启用TLS：0否/1是。
     */
    @Schema(description = "是否启用TLS：0否/1是")
    private Integer sslEnabled;

    /**
     * CA证书路径。
     */
    @Schema(description = "CA证书路径")
    private String caCertPath;

    /**
     * 客户端证书路径。
     */
    @Schema(description = "客户端证书路径")
    private String clientCertPath;

    /**
     * 客户端私钥路径。
     */
    @Schema(description = "客户端私钥路径")
    private String clientKeyPath;

    /**
     * 私钥密码。
     */
    @Schema(description = "私钥密码")
    private String keyPassword;

    /**
     * 遗嘱消息主题。
     */
    @Schema(description = "遗嘱消息主题")
    private String willTopic;

    /**
     * 遗嘱消息内容。
     */
    @Schema(description = "遗嘱消息内容")
    private String willPayload;

    /**
     * 遗嘱消息QoS：0/1/2。
     */
    @Schema(description = "遗嘱消息QoS：0/1/2")
    private Integer willQos;

    /**
     * 遗嘱是否保留：0否/1是。
     */
    @Schema(description = "遗嘱是否保留：0否/1是")
    private Integer willRetain;

    /**
     * MQTT协议版本（3.1/3.1.1/5.0）。
     */
    @Schema(description = "MQTT协议版本（3.1/3.1.1/5.0）")
    private String protocolVersion;

    /**
     * 默认QoS等级：0/1/2。
     */
    @Schema(description = "默认QoS等级：0/1/2")
    private Integer qosLevel;

    /**
     * 环境标识（dev/test/prod）。
     */
    @Schema(description = "环境标识（dev/test/prod）")
    private String environment;

    /**
     * 配置描述。
     */
    @Schema(description = "配置描述")
    private String description;

    /**
     * 公司。
     */
    @Schema(description = "公司")
    private Long companyId;

    /**
     * 创建时间。
     */
    @Schema(description = "创建时间")
    private Date createTime;

    /**
     * 更新时间。
     */
    @Schema(description = "更新时间")
    private Date updateTime;

    /**
     * 创建人。
     */
    @Schema(description = "创建人")
    private Long createUserId;

    /**
     * 更新者。
     */
    @Schema(description = "更新者")
    private Long updateUserId;

    /**
     * companyId 字典关联数据。
     */
    @Schema(description = "companyId 字典关联数据")
    private Map<String, Object> companyIdDictMap;

    /**
     * cleanSession 常量字典关联数据。
     */
    @Schema(description = "cleanSession 常量字典关联数据")
    private Map<String, Object> cleanSessionDictMap;

    /**
     * autoReconnect 常量字典关联数据。
     */
    @Schema(description = "autoReconnect 常量字典关联数据")
    private Map<String, Object> autoReconnectDictMap;

    /**
     * sslEnabled 常量字典关联数据。
     */
    @Schema(description = "sslEnabled 常量字典关联数据")
    private Map<String, Object> sslEnabledDictMap;

    /**
     * willRetain 常量字典关联数据。
     */
    @Schema(description = "willRetain 常量字典关联数据")
    private Map<String, Object> willRetainDictMap;
}
